# -*- coding: utf-8 -*-
import urllib
import hashlib


class AlipayService(object):
    params = sorted([  
        'service', 'partner', 'subject', 'body', 'out_trade_no', 'price', 'show_url',
        'quantity', 'sender_email', 'return_url', 'notify_url', '_input_charset',
    ])
    paygateway      = "https://www.alipay.com/cooperate/gateway.do?" # 支付接口
    service         = "create_direct_pay_by_user"                    # create_digital_goods_trade_p
    sign_type       = "MD5"                                          # 签名加密方法
    _input_charset  = "utf-8"                                        # 编码方式
    # 商户全局设置
    security_code   = "*******"                                      # 支付宝安全校验码（账户内提取）
    partner         = ""                                             # 支付宝合作伙伴id（账户内提取）
    notify_url      = ""                                             # 通知接收URL（异步）
    return_url      = ""                                             # 支付完成后跳转返回的网址URL
    sender_email    = ""                                             # 卖家支付宝帐户
    def __init__(self):
        self.subject        = ""                                     # 商品名称
        self.body           = ""                                     # 商品描述，推荐格式：商品名称（订单编号：订单编号）
        self.out_trade_no   = ""                                     # 外部交易号
        self.price          = "0.01"                                 # 商品单价
        self.quantity       = "1"                                    # 购买数量
        self.show_url       = ""                                     # 商品展示网址
        self.buyer_email    = ""                                     # 买家email
        self.buyer_msg      = ""                                     # 买家留言

    def getLink(self):
        parameters = ["%s=%s"%(k, urllib.quote_plus(getattr(self, k))) for k in self.params if getattr(self, k)]
        sign = self.calcSign()
        parameters.append("sign=%s"%sign)
        parameters.append("sign_type=%s"%self.sign_type)
        return self.paygateway + '&'.join(parameters)

    def calcSign(self):
        sign = '&'.join(["%s=%s"%(k, getattr(self, k)) for k in self.params if getattr(self, k)]) + self.security_code
        return hashlib.md5(sign).hexdigest()
